Android AsyncTask 内存泄漏
全部标签 我想在我的网络服务器上运行多个Java进程,一个用于每个网络应用程序。我正在使用具有大量支持类和jar文件的Web框架(Play),并且Java进程使用大量内存。一个Play进程显示大约225MB的“常驻私有(private)”内存。(我正在使用Java1.7.0_05在MacOSX上对此进行测试。)特定于应用程序的代码可能只有几MB。我知道典型的JavaWeb应用程序是添加到一个服务器进程(Tomcat等)的jars,但运行Play的标准方式似乎是作为一个独立的应用程序/进程。如果这些是C程序,那么这200MB中的大部分将是共享库,而不是在每个应用程序中重复。有没有办法在Java中实
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我对Java中volatile关键字的用法感到困惑。我在互联网上阅读了很多文章,但仍然一无所获。我脑子里有很多问题想问:首先,维基百科和许多博客都说所有volatile变量都存储在所有线程共享的主内存之上的Thread-Local内存中!我有点困惑,它们是指stackmemory吗?我知道每个线程都有自己的堆栈内存,它存储自己的原始文字和对象引用。如果是这
我正在调试我在Tomcat应用程序中遇到多年的问题-由于无法对Webapp类加载器进行GC,因此在重新启动应用程序时导致内存泄漏。我用JProfiler拍摄了堆的快照,看起来至少我的一些静态变量没有被释放。某些类有一个静态最终成员,它在类首次加载时被初始化,因为它是最终的,所以我不能在应用程序关闭时将它设置为null。静态最终变量是Tomcat中的反模式,还是我遗漏了什么?我刚刚开始研究JProfiler8,所以我可能会误解传入的引用资料告诉我的内容。干杯!卢克 最佳答案 这是几年前的,但是这个presentation我在JavaO
以下代码有时会在我的WindowsPC和Mac上打印“valueWrapper.isZero()”,都在服务器模式下运行他们的JVM。好的,这是因为值字段在ValueWrapper类中不是最终的,所以有可能某个线程看到了陈旧的值0。publicclassConcurrencyApp{privatefinalRandomrand=newRandom(System.currentTimeMillis());privateValueWrappervalueWrapper;privatestaticclassValueWrapper{privateintvalue;publicValueWra
我想知道,为什么java(或基于gc的语言如C#、GO)除了gc之外没有任何直接内存管理工具。我熟悉JLS和JVM规范,但我没有找到任何解释。它可以提高性能(减少gc的工作量)并且当开发人员可以直接删除他确定不再需要的对象时可以减少使用的内存量。我不熟悉python内存规范,但我知道,内存管理有gc()方法和关键字del。附言我在谷歌上搜索了一个小时,但我只找到描述我不应该关心删除内存管理语言中的对象的答案。 最佳答案 Java一直以安全为中心,尽管从未像易用性那么重要。非垃圾收集内存管理很难保证内存安全使用,虽然见Rust好好尝试
我正在运行Junit测试,该测试会抛出异常OutOfMemory。测试在内部NetBeans6.9.X中启动。在分析它时我已经意识到HeapmaxSize是64M。我想增加这个但我找不到如何执行此操作。我已经尝试过右键单击项目->属性->运行在VM选项下我设置了-Xms300M但这没有用。有什么提示吗?提前致谢。 最佳答案 来自http://wiki.gephi.org/index.php/NetBeans_Tips#How_to_increase_Heap_Size_for_JUnit_test编辑您的project.proper
我需要在同一台机器(两个不同的JVM)上运行的两个Java应用程序之间共享数据。我确切地说要共享的数据很大(大约7GB)。应用程序必须非常快速地访问数据,因为它们必须以非常高的速度回答传入的查询。我不希望应用程序为每个应用程序保存一份数据副本。我看到一种选择是使用内存映射文件。应用程序A从某处(假设是数据库)获取数据并将其存储在文件中。然后应用程序B可以使用java.nio访问这些文件。我不知道内存映射文件究竟是如何工作的,我只知道数据存储在一个文件中,并且这个文件(或其中的一部分)被映射到内存的一个区域(虚拟内存?)。因此,这两个应用程序可以读写内存中的数据,并且更改会自动(我猜?)
我试图了解内存泄漏的各种原因,这是我看到的示例之一,其中实现了hashCode()而不是equals()。我已经通读了其中一个,如果一个被过度骑乘,另一个也必须因违反契约(Contract)而被过度骑乘。这是示例代码importjava.util.HashMap;importjava.util.Map;publicclassMemoryLeak{staticclassKey{Integerid;Key(Integerid){this.id=id;}@OverridepublicinthashCode(){returnid.hashCode();}}publicstaticvoidmai
JVM选项:-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails-XX:SurvivorRatio=8正如预期的那样,JVM将为JVM堆分配近20MB的内存。但是请看下面的GC细节:PSYoungGentotal9216K,used4612K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)edenspace8192K,56%used[0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000)fromspace1024K,0%used[0
最近,我在运行应用程序时遇到了java.lang.OutOfMemoryError异常。在一个这样的实例中,我能够使用jvisualvm获取堆转储。我可以使用NetBeans8.1IDE打开从堆转储中获取的.hprof堆转储文件,但我不知道如何分析数据转储。我想知道如何读取转储文件并采取纠正措施以从应用程序的角度减少内存不足异常。 最佳答案 有很多方法可以找到内存泄漏的根本原因,例如使用JProfiler等分析器并简单地应用thisgreatvideo中描述的内容.您还可以查看EclipseMemoryAnalyzer也称为MAT它